package pe.gob.foncodes.spp.bs.dao;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.gob.foncodes.spp.bs.domain.Portafolio;

@Repository
public class PortafolioDAOImpl extends BaseDAO<Portafolio> implements
		PortafolioDAO {

	@Autowired
	public PortafolioDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	public List<Portafolio> buscarPortafolios() {
		return findAll(Portafolio.class);
	}

	public void guardarPortafolio(Portafolio portafolio) {
		save(portafolio);
	}

	public Portafolio actualizarPortafolio(Portafolio portafolio) {
		return update(portafolio);
	}

	public Portafolio buscarPortafolioPorId(Serializable id) {
		return findById(id, Portafolio.class);
	}

	public List<Portafolio> buscarPortafolioPorIdONOmbreOTipoPortafolio(
			Portafolio portafolio) {
		
		DetachedCriteria criteria = DetachedCriteria.forClass(Portafolio.class);
		if (portafolio != null) {
			if (portafolio.getNidPortafolio() != null && !portafolio.getNidPortafolio().equals(0L)) {
				criteria.add(Restrictions.eq("nidPortafolio",
						portafolio.getNidPortafolio()));
			}

			if (portafolio.getTxtPortafolio() !=null && !"".equals(portafolio.getTxtPortafolio())) {
				criteria.add(Restrictions.like("txtPortafolio","%"+
						portafolio.getTxtPortafolio()+"%"));
			}

			if (portafolio.getNidTipPortafolio() != null && !portafolio.getNidTipPortafolio().equals(0L)) {
				criteria.add(Restrictions.eq("nidTipPortafolio",
						portafolio.getNidTipPortafolio()));
			}
		}
		
		criteria.addOrder(Order.desc("nidPortafolio"));
		criteria.addOrder(Order.desc("fecCreacion"));

		return findByCriteria(criteria);
	}
	
	
	
	public Long buscarMaximoIdPortafolio() {
		BigDecimal id;
		List<BigDecimal> portafolios;
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT A.NID_PORTAFOLIO FROM SPP.PORTAFOLIO A WHERE ROWNUM < 2ORDER BY A.NID_PORTAFOLIO DESC ");
		portafolios = (List<BigDecimal>)findByNativeQuery(sql);
		if (portafolios != null && !portafolios.isEmpty()){
			id = portafolios.get(0);
			
			return (new Long(id.longValue())) + 1L;
		} else {
			return 1L;
		}		 
	}

}
